package cn.sharp.bbs.controller.admin;

import cn.sharp.bbs.common.Result;
import cn.sharp.bbs.common.page.PageParam;
import cn.sharp.bbs.service.RoleManageService;
import org.springframework.lang.Nullable;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;

@RestController
@RequestMapping("/admin/role")
public class RoleManageController {
    @Resource
    RoleManageService roleManageService;

    /**
     * 分页获取角色列表
     * @param pageParam 分页参数
     * @return 响应数据
     */
    @GetMapping("/list")
    public Result getRoleList(@Nullable @RequestParam PageParam pageParam){
        if (pageParam==null) pageParam = new PageParam();
        return Result.success(roleManageService.getRoleList(pageParam));
    }

    /**
     * 获取角色的权限树信息
     * @param role_id 角色id
     * @param pageParam 分页参数
     * @return 分页的权限列表
     */
    @GetMapping("/{role_id}/perm")
    public Result getRoleSubPerms(@PathVariable("role_id") Long role_id, @Nullable PageParam pageParam){
        if(roleManageService.isInvalidRole(role_id))
            return Result.fail(Result.ERR_CODE_BUSINESS, "角色id无效");
        return Result.success(roleManageService.getRolePerms(role_id, pageParam));
    }

    /**
     * 设置角色的权限
     * @param role_id 角色id
     * @param perms 要设定的权限id列表
     * @return 设置的结果
     */
    @PostMapping("/{role_id}/perm")
    public Result setRolePerms(@PathVariable("role_id") Long role_id, @Nullable @RequestBody Long[] perms){
        if(roleManageService.isInvalidRole(role_id))
            return Result.fail(Result.ERR_CODE_BUSINESS, "角色id无效");
        if(perms==null) perms = new Long[0];
        else if(Arrays.stream(perms).anyMatch(roleManageService::isInvalidPerm))
            return Result.fail(Result.ERR_CODE_BUSINESS, "权限id无效");
        roleManageService.setRolePerms(role_id, perms);
        return Result.success();
    }
}
